package org.posupe.distribuicao;

import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

import org.posupe.areas.Area;
import org.posupe.areas.AreaInexistenteException;
import org.posupe.areas.AreaJaCadastradaException;
import org.posupe.areas.IteratorAreas;
import org.posupe.candidatos.Candidato;
import org.posupe.candidatos.CandidatoInexistenteException;
import org.posupe.candidatos.CandidatoJaCadastradoException;
import org.posupe.candidatos.IteratorCandidatos;
import org.posupe.curriculos.Curriculo;
import org.posupe.curriculos.CurriculoInexistenteException;
import org.posupe.curriculos.CurriculoJaCadastradoException;
import org.posupe.curriculos.IteratorCurriculos;
import org.posupe.cursos.Curso;
import org.posupe.cursos.CursoInexistenteException;
import org.posupe.cursos.CursoJaCadastradoException;
import org.posupe.cursos.IteratorCursos;
import org.posupe.empresas.CnpjInvalidoException;
import org.posupe.empresas.Empresa;
import org.posupe.empresas.EmpresaInexistenteException;
import org.posupe.empresas.EmpresaJaCadastradaException;
import org.posupe.empresas.IteratorEmpresas;
import org.posupe.experiencias.ExperienciaInexistenteException;
import org.posupe.fachada.FachadaCVAdmin;
import org.posupe.instituicoesEnsino.InstituicaoEnsino;
import org.posupe.instituicoesEnsino.InstituicaoEnsinoInexistenteException;
import org.posupe.instituicoesEnsino.InstituicaoEnsinoJaCadastradaException;
import org.posupe.instituicoesEnsino.IteratorInstituicoesEnsino;
import org.posupe.util.RepositorioException;

public class RMITargetCVAdmin extends UnicastRemoteObject implements IRMITargetCVAdmin {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	protected RMITargetCVAdmin() throws RemoteException {
		super();

		try {
			Naming.rebind("//" + HOST_NAME + ":" + PORT + "/" + SERVICE_NAME , this);
		} catch (MalformedURLException e) {
			System.out.println("Erro inicializando o servidor. URL mal formada!");
    		e.printStackTrace();
    	}
	}

	public static void main(String args[]) {
		try {
    		System.out.println("Iniciando servico CVAdmin...");
			new RMITargetCVAdmin();
	    	System.out.println("Servico em execucao...");
    	} catch(RemoteException ex) {
    		System.out.println("Erro inicializando o servidor.");
    		ex.printStackTrace();
    	}
	}
	
	public void atualizar(Area area) throws RepositorioException,
			AreaInexistenteException, RemoteException, ComunicacaoException {
		FachadaCVAdmin.getInstance().atualizar(area);
	}

	public void atualizar(Candidato candidato) throws RepositorioException,
			CandidatoInexistenteException, RemoteException, ComunicacaoException {
		FachadaCVAdmin.getInstance().atualizar(candidato);
	}

	public void atualizar(Curriculo curriculo)
			throws CurriculoInexistenteException, RepositorioException,
			AreaInexistenteException, CursoInexistenteException,
			ExperienciaInexistenteException, CandidatoInexistenteException,
			RemoteException, ComunicacaoException {
		FachadaCVAdmin.getInstance().atualizar(curriculo);
	}

	public void atualizar(Curso curso) throws CursoInexistenteException,
			InstituicaoEnsinoInexistenteException, RepositorioException,
			RemoteException, ComunicacaoException {
		FachadaCVAdmin.getInstance().atualizar(curso);
	}

	public void atualizar(Empresa empresa) throws EmpresaInexistenteException,
			RepositorioException, AreaInexistenteException, RemoteException, ComunicacaoException {
		FachadaCVAdmin.getInstance().atualizar(empresa);
	}

	
	public void atualizar(InstituicaoEnsino instituicaoEnsino)
			throws InstituicaoEnsinoInexistenteException, RepositorioException,
			RemoteException, ComunicacaoException {
		FachadaCVAdmin.getInstance().atualizar(instituicaoEnsino);
	}

	public void cadastrar(Area area) throws RepositorioException,
			AreaJaCadastradaException, RemoteException, ComunicacaoException {
		FachadaCVAdmin.getInstance().cadastrar(area);
	}

	public void cadastrar(Candidato candidato) throws RepositorioException,
			CandidatoJaCadastradoException, RemoteException, ComunicacaoException {
		FachadaCVAdmin.getInstance().cadastrar(candidato);
	}

	public void cadastrar(Curriculo curriculo)
			throws CurriculoJaCadastradoException, RepositorioException,
			AreaInexistenteException, CursoInexistenteException,
			ExperienciaInexistenteException, CandidatoInexistenteException,
			RemoteException, ComunicacaoException {
		FachadaCVAdmin.getInstance().cadastrar(curriculo);
	}

	public void cadastrar(Curso curso) throws CursoJaCadastradoException,
			InstituicaoEnsinoInexistenteException, RepositorioException,
			RemoteException, ComunicacaoException {
		FachadaCVAdmin.getInstance().cadastrar(curso);
	}

	public void cadastrar(Empresa empresa) throws EmpresaJaCadastradaException, AreaInexistenteException,
			RepositorioException, CnpjInvalidoException, RemoteException, ComunicacaoException {
		FachadaCVAdmin.getInstance().cadastrar(empresa);
	}

	public void cadastrar(InstituicaoEnsino instituicaoEnsino)
			throws InstituicaoEnsinoJaCadastradaException,
			RepositorioException, RemoteException, ComunicacaoException {
		FachadaCVAdmin.getInstance().cadastrar(instituicaoEnsino);
	}

	public boolean existeArea(int codigo) throws RepositorioException,
			RemoteException, ComunicacaoException {
		return FachadaCVAdmin.getInstance().existeArea(codigo);
	}

	public boolean existeCandidato(String cpf) throws RepositorioException,
			RemoteException, ComunicacaoException {
		return FachadaCVAdmin.getInstance().existeCandidato(cpf);
	}

	public boolean existeCurriculo(int codigo) throws RepositorioException,
			RemoteException, ComunicacaoException {
		return FachadaCVAdmin.getInstance().existeCurriculo(codigo);
	}

	public boolean existeCurso(int codigo) throws RepositorioException,
			RemoteException, ComunicacaoException {
		return FachadaCVAdmin.getInstance().existeCurso(codigo);
	}

	public boolean existeEmpresa(String cnpj) throws RepositorioException,
			RemoteException, ComunicacaoException {
		return FachadaCVAdmin.getInstance().existeEmpresa(cnpj);
	}

	public boolean existeInstituicaoEnsino(int codigo)
			throws RepositorioException, RemoteException, ComunicacaoException {
		return FachadaCVAdmin.getInstance().existeInstituicaoEnsino(codigo);
	}

	public IteratorAreas getAreas() throws RepositorioException,
			RemoteException, ComunicacaoException {
		return FachadaCVAdmin.getInstance().getAreas();
	}

	public IteratorCandidatos getCandidatos() throws RepositorioException,
			RemoteException, ComunicacaoException {
		return FachadaCVAdmin.getInstance().getCandidatos();
	}

	public IteratorCurriculos getCurriculos() throws RepositorioException,
			RemoteException, ComunicacaoException {
		return FachadaCVAdmin.getInstance().getCurriculos();
	}

	public IteratorCursos getCursos() throws RepositorioException,
			RemoteException, ComunicacaoException {
		return FachadaCVAdmin.getInstance().getCursos();
	}

	public IteratorEmpresas getEmpresas() throws RepositorioException,
			RemoteException, ComunicacaoException {
		return FachadaCVAdmin.getInstance().getEmpresas();
	}

	public IteratorInstituicoesEnsino getInstituicoesEnsino()
			throws RepositorioException, RemoteException, ComunicacaoException {
		return FachadaCVAdmin.getInstance().getInstituicoesEnsino();
	}

	public IteratorAreas procurar(Area area) throws RepositorioException,
			RemoteException, ComunicacaoException {
		return FachadaCVAdmin.getInstance().procurar(area);
	}

	public IteratorCandidatos procurar(Candidato candidato)
			throws RepositorioException, RemoteException, ComunicacaoException {
		return FachadaCVAdmin.getInstance().procurar(candidato);
	}

	public IteratorCurriculos procurar(Curriculo curriculo)
			throws RepositorioException, RemoteException, ComunicacaoException {
		return FachadaCVAdmin.getInstance().procurar(curriculo);
	}

	public IteratorCursos procurar(Curso curso) throws RepositorioException,
			RemoteException, ComunicacaoException {
		return FachadaCVAdmin.getInstance().procurar(curso);
	}

	public IteratorEmpresas procurar(Empresa empresa)
			throws RepositorioException, RemoteException, ComunicacaoException {
		return FachadaCVAdmin.getInstance().procurar(empresa);
	}

	public IteratorInstituicoesEnsino procurar(
			InstituicaoEnsino instituicaoEnsino) throws RepositorioException,
			RemoteException, ComunicacaoException {
		return FachadaCVAdmin.getInstance().procurar(instituicaoEnsino);
	}

	public Area procurarArea(int codigo) throws RepositorioException,
			AreaInexistenteException, RemoteException, ComunicacaoException {
		return FachadaCVAdmin.getInstance().procurarArea(codigo);
	}

	public Candidato procurarCandidato(String cpf) throws RepositorioException,
			CandidatoInexistenteException, RemoteException, ComunicacaoException {
		return FachadaCVAdmin.getInstance().procurarCandidato(cpf);
	}

	public Curriculo procurarCurriculo(int codigo)
			throws CurriculoInexistenteException, RepositorioException,
			RemoteException, ComunicacaoException {
		return FachadaCVAdmin.getInstance().procurarCurriculo(codigo);
	}

	public Curso procurarCurso(int codigo) throws CursoInexistenteException,
			RepositorioException, RemoteException, ComunicacaoException {
		return FachadaCVAdmin.getInstance().procurarCurso(codigo);
	}

	public Empresa procurarEmpresa(String cnpj)
			throws EmpresaInexistenteException, RepositorioException,
			RemoteException, ComunicacaoException {
		return FachadaCVAdmin.getInstance().procurarEmpresa(cnpj);
	}

	public InstituicaoEnsino procurarInstituicaoEnsino(int codigo)
			throws InstituicaoEnsinoInexistenteException, RepositorioException,
			RemoteException, ComunicacaoException {
		return FachadaCVAdmin.getInstance().procurarInstituicaoEnsino(codigo);
	}

	public void removerArea(int codigo) throws RepositorioException,
			AreaInexistenteException, RemoteException, ComunicacaoException {
		FachadaCVAdmin.getInstance().removerArea(codigo);
	}

	public void removerCandidato(String cpf) throws RepositorioException,
			CandidatoInexistenteException, RemoteException, ComunicacaoException {
		FachadaCVAdmin.getInstance().removerCandidato(cpf);
	}

	public void removerCurriculo(int codigo)
			throws CurriculoInexistenteException, RepositorioException,
			RemoteException, ComunicacaoException {
		FachadaCVAdmin.getInstance().removerCurriculo(codigo);
	}

	public void removerCurso(int codigo) throws CursoInexistenteException,
			RepositorioException, RemoteException, ComunicacaoException {
		FachadaCVAdmin.getInstance().removerCurso(codigo);
	}

	public void removerEmpresa(String cnpj) throws EmpresaInexistenteException,
			RepositorioException, RemoteException, ComunicacaoException {
		FachadaCVAdmin.getInstance().removerEmpresa(cnpj);
	}

	public void removerInstituicaoEnsino(int codigo)
			throws InstituicaoEnsinoInexistenteException, RepositorioException,
			RemoteException, ComunicacaoException {
		FachadaCVAdmin.getInstance().removerInstituicaoEnsino(codigo);
	}
}
